<?php
namespace Common\Model;
//导入核心模型
use Hdphp\Model\Model;
/**
 * 文章管理模型
 */
	class Article extends Model{
//		指定模型操作的表
		protected $table='article';
//		自动验证参数
		protected $validate=array(
			array('title','required','分类名不能为空',3,3),
		);
//		自动完成
		protected $auto=array(
//			字段验证：字段名，方法或函数名，方法类型，验证条件，验证时机
			array('sendtime','time','function',3,1),
			array('updatetime','time','function',3,2),
			array('user_uid','uid','method',3,1),
			array('thumb','image','method',3,3)
		);
//		用户id
		public function uid(){
//			返回用户的id
			return $_SESSION['id'];
		}
		
//		图片处理的方法
		public function image(){
//			判断这个post过来的字段里面有没有路径，有就走里面，没有就走下面
			if(isset($_POST['thumb'])){
//				返回这个字段名里面的路径信息
				return $_POST['thumb'];
			}
//			文件夹的路径
			$uploadDir='Upload/'.date('ymd');
//			判断有没有文件夹，没有则创建
			is_dir($uploadDir)||mkdir($uploadDir,0777,true);
//			调用框架里面的上传方法，拼接上传方法
			$file=Upload::type('jpg,png,gif')->path($uploadDir)->size(2000000)->make();
//			缩略图
			if($file){
//				拼接缩略图的路径
				$dst=$uploadDir.'/thumb_'.$file[0]['basename'];
//				缩略图的方法
				$path=Image::thumb($file[0]['path'],$dst,300,300,6);
//				p($path);die;
				return $path;
			}
//			如果没有上传条件就返回一个空字符串到字段
			return '';
		}
//		添加文章的方法
		public function store(){
//			添加文章需要先验证，返回来bool值
			if(!$this->create()) return FALSE;
			
//			验证文章内容表
//			先找到这个表，new下这个表所在的类
			$arcdata=new ArcData;
//			判断返回的如果是假的话
			if(!$arcdata->create()){
//				返回这个类里面的错误方法
				$this->error=$arcdata->getError();
				return FALSE;
			}
			
//			上传文件不存在或上传文件是空的话，=4是为空
			if($_FILES['thumb']['error']!=4){
//				获取上传类中错误信息，赋值到$error,再赋值到$this->error里面
				if($error=Upload::getError()){
					$this->error=$error;
					return FALSE;
				}
			}
			
//			因为验证完会自动把数据存到$this->data中
//			获取文章表填入数据的主键
			$aid=$this->add();
			
//			添加文章标签中间表
//			把这个主键tid中的所有键值内容写到文章标签中间表中
//			进行实例化中间表
			$arctag=new ArcTag;
//			将post过来的tid字段循环重组后添加到中间表中
			foreach(Q('post.tid') as $tid){
				$data=array(
					'article_aid'=>$aid,
					'tag_tid'=>$tid
				);
//				添加到文章标签中间表中
				$arctag->add($data);
			}
			
//			进行处理文章内容表
//			因为Arcdata这个模型data临时数组中没有article_aid这个字段，因为添加post条件的时候还没有添加文章表，获取不到$aid
			$arcdata->data['article_aid']=$aid;
//			添加到文章内容表中
			$arcdata->add();
			return true;
		}

//		编辑方法
		public function edit(){
//			编辑的验证
			if(!$this->create()) return FALSE;
			
//			验证文章内容表
//			实例化这个类
			$arcData=new ArcData;
//			判断自动验证
			if(!$arcData->create()){
				$this->error=$arcData->getError();
				return FALSE;
			}
//			判断上传文件是否有上传图片
//			如果$_FILES中['thumb']上传动作存在，就执行里面获取upload中的error信息
			if(isset($_FILES['thumb']) && $_FILES['thumb']['error']!=4){
//			如果真有错误，就获取上传类中的错误信息到$this->error	
			if($error=Upload::getError()){
				$this->error=$error;
				return FALSE;
			    }
			}
//			这里需要有主键，如果post条件中有主键就会自动修改过来的这条主键的一条
			$this->save();
			
//			修改中间表
//			先实例化这个中间表
			$arcTag=new ArcTag;
//			获取POST过来的aid
			$aid=$_POST['aid'];
//			先把原来的数据删除
			$arcTag->where('article_aid',$aid)->delete();
//			将新提交过来的tagid写入数据库
			foreach(Q('post.tid') as $tid){
//				重组数据
				$data=array(
				'article_aid'=>$aid,
				'tag_tid'=>$tid				
				);
//				重新添加到中间表中
				$arcTag->add($data);
			}
			
//			添加到文章内容表中
			$arcData->where('article_aid',$aid)->save();
			
			return true;
		}
//		删除方法
		public function del(){
//			获取GET传输的cid
			$aid=Q('get.aid',0,'intval');
//			删除点击的这一条
			$this->where('aid',$aid)->delete();
//			删除内容表
			$arcdata=new ArcData;
			$arcdata->where('article_aid',$aid)->delete();
//			删除中间表
			$arctag=new ArcTag;
			$arctag->where('article_aid',$aid)->delete();
			return true;
		}
	}

